//
//  TFTableViewCollectionItemManager.h
//  AppLibs
//
//  Created by 杜恺 on 2018/7/30.
//  Copyright © 2018年 jack Kong. All rights reserved.
//

#import <Foundation/Foundation.h>

//layout
#import "TFTableViewCollectionItemLayout.h"
#import "TFTableViewCollectionItemView.h"
#import "TFTableViewCollectionItem.h"

@class TFTableViewCollectionItemManager;

/**
 返回对应索引下的view
 
 @param collectionItemManager 管理类
 @param collectionItem 对应的collectionItem
 @param indexPath 索引
 @return TFTableViewCollectionItemView
 */
typedef __kindof TFTableViewCollectionItemView * _Nonnull(^TFTableViewCollectionItemManagerItemViewForIndexPathBlock)(TFTableViewCollectionItemManager * __nonnull collectionItemManager, __kindof TFTableViewCollectionItem * __nonnull collectionItem, NSIndexPath * __nonnull indexPath);

/**
 点击某个itemView的block
 
 @param collectionItemManager 管理类
 @param collectionItem 对应的collectionItem
 @param itemView 对应点击的itemView
 @param indexPath 索引
 */
typedef void(^TFTableViewCollectionItemManagerDidSelectItemViewAtIndexBlock)(TFTableViewCollectionItemManager * __nonnull collectionItemManager, __kindof TFTableViewCollectionItem * __nonnull collectionItem, __kindof TFTableViewCollectionItemView * __nonnull itemView,NSIndexPath * __nonnull indexPath);

/**
 类似collectionview的tableviewitem的布局管理类，此管理类只负责布局，以及重用view。
 */
@interface TFTableViewCollectionItemManager : NSObject

/**
 初始化方法
 
 @param collectionItemsArray 对应的TFTableViewCollectionItem数组，注：此时的item一定要创建好对应的TFTableViewCollectionItemLayout
 @return TFTableViewCollectionItemManager
 */
- (nonnull instancetype)initWithCollectionItemsArray:(nonnull NSArray<__kindof TFTableViewCollectionItem *> *)collectionItemsArray;

/**
 对应的Items的数组
 */
@property (nonatomic, strong, nonnull) NSArray<__kindof TFTableViewCollectionItem *> *collectionItemsArray;

/**
 获取重用的view
 
 @param identifier 重用标识符
 @return 重用的view
 */
- (nonnull __kindof UIView *)dequeueReusableItemViewWithIdentifier:(nonnull NSString *)identifier indexPath:(nonnull NSIndexPath *)indexPath;

/**
 根据class获取重用view
 
 @param aClass 重用class
 @return 重用的view
 */
- (nonnull __kindof UIView *)dequeueReusableItemViewWithClass:(nonnull Class)aClass indexPath:(nonnull NSIndexPath *)indexPath;

/**
 注册重用的view
 
 @param aClass 重用view的class
 @param identifier 重用标识符
 */
- (void)registerClass:(nonnull Class)aClass forItemViewReuseIdentifier:(nonnull NSString *)identifier;

/**
 注册重用view
 
 @param aClass 重用view的class
 */
- (void)registerItemViewWithClass:(nonnull Class)aClass;

/**
 对应的每个索引的view的block
 */
@property (nonatomic, copy, nonnull) TFTableViewCollectionItemManagerItemViewForIndexPathBlock itemViewForIndexPathBlock;


/**
 点击某个itemView
 */
@property (nonatomic, copy, nullable) TFTableViewCollectionItemManagerDidSelectItemViewAtIndexBlock didSelectItemViewAtIndexBlock;

@end
